接下來,我們來設定一些比較基礎且設定一次就不太需要再改的東西,例如 ConfigMap 和 Secret。為什麼叫 ConfigMap 而不是 Config 呢?因為 Kubernetes 本來就是透過 Config 來設定一些東西,所以只好改叫 ConfigMap。
首先,讓我們談談 ConfigMap 的使用。如果只是一些暫時性、少量的設定,我們可以直接使用指令來生成:
kubectl create configmap <configmap_name> --from-literal=key=value ...
# 範例
kubectl create configmap configmap-test1 --from-literal=hello=world --from-literal=version=2.1.2
但是如果設定是比較長期的,或者需要處理大量的設定,應該如何呢?這時 Kubernetes 可以透過 YAML 文件的方式生成 ConfigMap。
config.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: config-test
data:
key1: "value1"
key2: "value2"
然後使用以下指令生成 ConfigMap:
kubectl apply -f <configmap_file_name>
# 範例
kubectl apply -f config.yaml
接下來,我們可以執行以下指令查看 ConfigMap:
kubectl get configmaps
# 或者
kubectl get cm
如果需要了解詳細內容,可以透過以下指令:
kubectl describe configmap <configmap_name>
# 範例
kubectl describe configmap configmap-test
如果需要刪除 ConfigMap,可以使用以下指令:
kubectl delete configmap <configmap_name>
# 範例
kubectl delete configmap configmap-test
講完了 ConfigMap,接下來我們來談談 Secret。雖然在使用上 ConfigMap 和 Secret 差異不大,但還是需要特別說明一下。
首先,Secret 不能使用指令直接生成,必須透過文件生成(據我所知是這樣的)。此外,Secret 的值必須使用 Base64 加密編碼。
在 Linux 下,可以使用以下指令獲取 Base64 編碼後的結果:
echo -n 'value' | base64
# 範例
echo -n 'value1' | base64
> dmFsdWUx
獲取編碼結果後,我們就可以透過以下文件生成 Secret:secret.yaml
apiVersion: v1
kind: Secret
metadata:
name: secret-test
data:
key1: dmFsdWUx
stringData:
key2: value2
data -> 只接受 base64 編碼
stringdata -> 可接受 plain text,在建立時會自動編碼
然後使用以下指令應用:
kubectl apply -f <secret_file_name>
# 範例
kubectl apply -f secret.yaml
列出 Secrets:
kubectl get secrets
查看詳細資料:
kubectl describe secret <secret_name>
# 範例
kubectl describe secret secret-test
請注意 Secret 不會顯示出值,因此非常適合存儲私密的設定。
如需更詳細的設定,可以參考官方文件的 ConfigMap 部分和 Secret 部分。